docs: resync ADR projections to shipped rule set (WR-0036/F-ADJ-01)#34
Conversation
Goosterhof
left a comment
There was a problem hiding this comment.
✅ Approve-worthy
0 blockers · 0 concerns · 1 nit · 1 praise · 0 inline
Round 1. CI green (check (8.4), check (8.5) both pass — required). Docs-only resync of the ## War Room ADR Projections block in CLAUDE.md against the 11 rules shipping on main.
Verified the load-bearing claim — every bullet's rule→doctrine mapping against the actual rule classes' docblock Doctrine source lines, which ADR-0021 makes authoritative:
LogRule+LogBuilderTruncateRule→ §Append-only;EnforceAuditSnapshotOnRetryRule→ §Snapshot-on-Retry. ✓EnforceResourceDataValidatorOptInRule→ ADR-0009 §EAGER_LOAD validator opt-in. ✓ForbidEloquentMutationInControllersRule→ ADR-0011 + ADR-0019 (correctly cited on both bullets). ✓EnforceFormRequestToDtoRule→ ADR-0012;EnforceAuditTransactionScopeRule→ ADR-0029 §Decision rule 3. ✓ForbidAbortHelperRule+EnforceCurrentUserAttributeRule→ war-room §Explicit over implicit (no numbered ADR). ✓
Release-status labels also check out against CHANGELOG.md: EnforceResourceDataValidatorOptInRule "shipped in v0.3.0" matches the [0.3.0] entry (PR #20); ForbidAbortHelperRule "shipped" matches; the four [Unreleased] labels (ForbidEloquentMutationInControllersRule, EnforceFormRequestToDtoRule, EnforceAuditTransactionScopeRule, EnforceCurrentUserAttributeRule) appear only under [Unreleased]. Body's "11 rules" matches src/Rules/ exactly (11 classes). No scope drift — diff is 13/-6, CLAUDE.md only, no src//CHANGELOG/version touched as the body claims.
Praise — routing ForbidAbortHelperRule + EnforceCurrentUserAttributeRule into a "no published ADR" subsection rather than minting a fake ADR projection is the right call. Their docblocks name §Explicit over implicit, not a number, and the doc now mirrors that exactly.
Nit
The ADR-0019 bullet is now the longest in the block and carries a parenthetical history of the subsumed EnforceExplicitHydrationRule candidate. Accurate, but the provenance ("subsumed by the controller-mutation rule ... broader application-wide hydration rule remains a future candidate") is the kind of dated narrative our own CLAUDE.md-doctrine-vs-provenance lens routes to spy memory/pulse, not the front-door doctrine projection. Consider trimming to the one-clause statement of what ships and parking the candidate history elsewhere. Optional — the content is correct.
Automated war-room agent review — posted because this PR carries the Agent Review Requested label.
Review Loop · 9/10 · PASSphpstan-warroom-rules #34 · AC anchor: CLAUDE.md ADR-projection surface anchor (no Kendo/plan/PR-AC anchor; docs-only resync verified against src/ + CHANGELOG) · head Tip No findings — clean against the review checklist. Actionmerge-ready |
jasperboerhof
left a comment
There was a problem hiding this comment.
Auto-approved — review-loop verdict PASS, CI green, no human blocker, no open MAJOR+ threads. See the verdict comment + inline notes.
The `## War Room ADR Projections` section was last synced 2026-05-08 and mis-described what the package distributes. Reconciled every projection bullet against the 11 rules shipping on `main`, mapping each by its docblock "Doctrine source" line per ADR-0021. - ADR-0009: rule released in v0.3.0 (was stale `Phase 2, [Unreleased]`). - ADR-0011: add `ForbidEloquentMutationInControllersRule` (PR #28). - ADR-0012: was "no HTTP surface" — now ships `EnforceFormRequestToDtoRule` (PR #33). - ADR-0019: add `ForbidEloquentMutationInControllersRule`; retire stale `EnforceExplicitHydrationRule` Phase-2 candidate note. - ADR-0029: ADDED — ships `EnforceAuditTransactionScopeRule` (PR #27). - ADR-0001: add `LogBuilderTruncateRule` to the §Append-only bullet. - New subsection for war-room Architectural-Principle rules with no published ADR: `ForbidAbortHelperRule` + `EnforceCurrentUserAttributeRule` (PR #26, Principle #9). - Bump Last synced to 2026-06-15. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
9a4533f to
9d52e9a
Compare
What
Full resync of the
## War Room ADR Projectionssection ofCLAUDE.md(WR-0036 / F-ADJ-01). The section was last synced 2026-05-08 and was ~5 weeks stale — it mis-described what the package distributes. Every projection bullet was reconciled against the 11 rules now shipping onmain, mapped by each rule class's docblock "Doctrine source" line per ADR-0021 §Doctrine source in docblock (that docblock, not assumption, is authoritative).Docs-only. No
src/, CHANGELOG, version-bump, or rule-code changes.Per-bullet changes, with the rule + PR that made each stale
EnforceResourceDataValidatorOptInRule(Phase 2,[Unreleased])…(§EAGER_LOAD validator opt-in, shipped in v0.3.0)[Unreleased]was staleEnforceActionTransactionsRule+ForbidDatabaseManagerInActionsRuleForbidEloquentMutationInControllersRule(ADR-0011 + ADR-0019)EnforceFormRequestToDtoRule(§FormRequest → DTO Flow,[Unreleased])"EnforceExplicitHydrationRulewill distribute this rule."ForbidEloquentMutationInControllersRule; retired the staleEnforceExplicitHydrationRulecandidate noteEnforceAuditTransactionScopeRule(§Decision rule 3)LogRule+EnforceAuditSnapshotOnRetryRuleLogBuilderTruncateRule(both §Append-only)ForbidAbortHelperRule+EnforceCurrentUserAttributeRule(Principle #9, Explicit-over-implicit)EnforceCurrentUserAttributeRuleandForbidAbortHelperRulemap to war-room §Architectural Principles — Explicit over implicit (their docblock names the principle, not a numbered ADR), so they live in a new subsection rather than an invented ADR projection.Gates
composer test— PASS (107 tests, 163 assertions)composer phpstan(self-analysis) — PASS ([OK] No errors, 12 files)Docs-only change; both gates green confirm the markdown edit trips no self-analysis docblock rule.
🤖 Generated with Claude Code